//
// Created by HP on 2022/1/3.
//

#ifndef VULKAN_TUTORIAL_FIRST_APP_H
#define VULKAN_TUTORIAL_FIRST_APP_H

#include "lve_device.h"
#include "lve_renderer.h"
#include "lve_game_object.h"

// std
#include <memory>
#include <chrono>

namespace lve {
    class FirstApp {
    public:
        static constexpr int WIDTH = 800;
        static constexpr int HEIGHT = 600;

        FirstApp();
        ~FirstApp();

        FirstApp(const FirstApp&) = delete;
        FirstApp& operator=(const FirstApp&) = delete;

        void run();

    private:
        void loadGameObjects();

        LveWindow lveWindow{WIDTH, HEIGHT, "Hello Vulkan"};
        LveDevice lveDevice{lveWindow};
        LveRenderer lveRenderer{lveWindow, lveDevice};
        std::vector<LveGameObject> gameObjects;
    };
}


#endif //VULKAN_TUTORIAL_FIRST_APP_H
